<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>Nginx 中文文档 - Reference | Docs4dev</title>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<meta name="description" content="Nginx (engine x) 是一个高性能的HTTP和反向代理服务，也是一个IMAP/POP3/SMTP服务。">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="HandheldFriendly" content="true">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta property="og:type" content="website">
<meta property="og:title" content="Nginx 中文文档 - Reference">
<meta property="og:url" content="https://www.docs4dev.com/docs/zh/nginx/current/reference/njs-reference.html">
<meta property="og:site_name" content="Docs4dev">
<meta property="og:locale" content="zh_CN">
<meta name="twitter:card" content="Nginx (engine x) 是一个高性能的HTTP和反向代理服务，也是一个IMAP/POP3/SMTP服务。">
<meta name="generator" content="Docs4dev template engine">
<link rel="stylesheet" href="static/css/app.min.css">
<link rel="shortcut icon" href="https://www.docs4dev.com/static/images/favicon.ico" type="image/x-icon">
<script async="" src="static/js/js.js"></script>
<script async="" src="static/js/adsbygoogle.js" crossorigin="anonymous"></script>
<script>
    window.dataLayer = window.dataLayer || [];

    function gtag() {
      dataLayer.push(arguments);
    }

    gtag('js', new Date());
    gtag('config', 'UA-129571937-1');
  </script>
<link rel="amphtml" href="https://www.docs4dev.com/amp/docs/zh/nginx/current/reference/njs-reference.html">
<script type="application/ld+json">{"name":null,"headline":"Nginx 中文文档-Reference","inLanguage":"zh-CN","version":"current","image":"/static/icon/icon-nginx.svg","datePublished":"2021-05-20T12:51:01Z","dateCreated":"2021-05-20T12:51:01Z","dateModified":"2021-07-07T12:48:29Z","@context":"https://schema.org/","@type":"APIReference","abstract":"Nginx (engine x) 是一个高性能的HTTP和反向代理服务，也是一个IMAP/POP3/SMTP服务。"}</script>
</head>
<body>
<div class="book with-summary">
<div class="book-summary">
<div class="logo">
<a href="index.html" style="color: inherit;">
<img src="static/picture/icon-nginx.svg" style="width: 48px; height: 48px;" alt="Logo">
</a>
<b style="color: inherit; margin-left: 8px;">Nginx 中文文档</b>
</div>
<div class="item">
<div>
<label for="version">版本</label>
<select id="version" onchange="onVersionChange(this)">
<option value="current" selected="selected">current</option>
</select>
</div>
<div style="margin-top: 8px;">
<label for="language">语言</label>
<select id="language" onchange="onLangChange(this)" value="zh">
<option value="en">English</option>
<option value="zh" selected="selected">中文</option>
</select>
</div>

</div>
<div class="item menus">
<a title="Table of Contents" style="margin-right: 8px;" href="index.html">
<i class="fa fa-chevron-left"></i>
<span style="margin-left: 2px;">返回目录</span>
</a>
</div>
<nav role="navigation" id="navigation">
<ul class="summary">
<li class="chapter"> <a href="install.html" title="Introduction"> Introduction </a>
<ul class="articles">
<li class="chapter"> <a href="install.html" title="Installing nginx"> Installing nginx </a> </li>
<li class="chapter"> <a href="configure.html" title="从源代码构建  Nginx"> 从源代码构建 Nginx </a> </li>
<li class="chapter"> <a href="beginners_guide.html" title="Beginner's Guide"> Beginner's Guide </a> </li>
<li class="chapter"> <a href="control.html" title="Controlling nginx"> Controlling nginx </a> </li>
<li class="chapter"> <a href="events.html" title="连接处理方法"> 连接处理方法 </a> </li>
<li class="chapter"> <a href="hash.html" title="设置哈希"> 设置哈希 </a> </li>
<li class="chapter"> <a href="debugging_log.html" title="调试日志"> 调试日志 </a> </li>
<li class="chapter"> <a href="syslog.html" title="记录到系统日志"> 记录到系统日志 </a> </li>
<li class="chapter"> <a href="syntax.html" title="配置文件测量单位"> 配置文件测量单位 </a> </li>
<li class="chapter"> <a href="switches.html" title="Command-line parameters"> Command-line parameters </a> </li>
<li class="chapter"> <a href="windows.html" title="Windows 版  Nginx"> Windows 版 Nginx </a> </li>
<li class="chapter"> <a href="http-request_processing.html" title="Nginx 如何处理请求"> Nginx 如何处理请求 </a> </li>
<li class="chapter"> <a href="http-server_names.html" title="Server names"> Server names </a> </li>
<li class="chapter"> <a href="http-load_balancing.html" title="使用  Nginx 作为  HTTP 负载均衡器"> 使用 Nginx 作为 HTTP 负载均衡器 </a> </li>
<li class="chapter"> <a href="http-configuring_https_servers.html" title="配置  HTTPS 服务器"> 配置 HTTPS 服务器 </a> </li>
<li class="chapter"> <a href="stream-stream_processing.html" title="Nginx 如何处理  TCP/UDP 会话"> Nginx 如何处理 TCP/UDP 会话 </a> </li>
<li class="chapter"> <a href="njs-index.html" title="用  njs 编写脚本"> 用 njs 编写脚本 </a> </li>
</ul> </li>
<li class="chapter"> <a href="howto_build_on_win32.html" title="How-To"> How-To </a>
<ul class="articles">
<li class="chapter"> <a href="howto_build_on_win32.html" title="使用  Visual C 在  Win32 平台上构建  Nginx"> 使用 Visual C 在 Win32 平台上构建 Nginx </a> </li>
<li class="chapter"> <a href="nginx_dtrace_pid_provider.html" title="使用  DTrace pid 提供程序调试  nginx"> 使用 DTrace pid 提供程序调试 nginx </a> </li>
<li class="chapter"> <a href="http-converting_rewrite_rules.html" title="转换重写规则"> 转换重写规则 </a> </li>
<li class="chapter"> <a href="http-websocket.html" title="WebSocket proxying"> WebSocket proxying </a> </li>
</ul> </li>
<li class="chapter"> <a href="contributing_changes.html" title="Development"> Development </a>
<ul class="articles">
<li class="chapter"> <a href="contributing_changes.html" title="Contributing Changes"> Contributing Changes </a> </li>
<li class="chapter"> <a href="dev-development_guide.html" title="Development guide"> Development guide </a> </li>
</ul> </li>
<li class="chapter"> <a href="dirindex.html" title="Modules reference"> Modules reference </a>
<ul class="articles">
<li class="chapter"> <a href="dirindex.html" title="指令的字母索引"> 指令的字母索引 </a> </li>
<li class="chapter"> <a href="varindex.html" title="变量按字母顺序索引"> 变量按字母顺序索引 </a> </li>
<li class="chapter"> <a href="ngx_core_module.html" title="Core functionality"> Core functionality </a> </li>
<li class="chapter"> <a href="http-ngx_http_core_module.html" title="ngx_http_core_module"> ngx_http_core_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_access_module.html" title="ngx_http_access_module"> ngx_http_access_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_addition_module.html" title="ngx_http_addition_module"> ngx_http_addition_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_api_module.html" title="ngx_http_api_module"> ngx_http_api_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_auth_basic_module.html" title="ngx_http_auth_basic_module"> ngx_http_auth_basic_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_auth_jwt_module.html" title="ngx_http_auth_jwt_module"> ngx_http_auth_jwt_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_auth_request_module.html" title="ngx_http_auth_request_module"> ngx_http_auth_request_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_autoindex_module.html" title="ngx_http_autoindex_module"> ngx_http_autoindex_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_browser_module.html" title="ngx_http_browser_module"> ngx_http_browser_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_charset_module.html" title="ngx_http_charset_module"> ngx_http_charset_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_dav_module.html" title="ngx_http_dav_module"> ngx_http_dav_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_empty_gif_module.html" title="ngx_http_empty_gif_module"> ngx_http_empty_gif_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_f4f_module.html" title="ngx_http_f4f_module"> ngx_http_f4f_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_fastcgi_module.html" title="ngx_http_fastcgi_module"> ngx_http_fastcgi_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_flv_module.html" title="ngx_http_flv_module"> ngx_http_flv_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_geo_module.html" title="ngx_http_geo_module"> ngx_http_geo_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_geoip_module.html" title="ngx_http_geoip_module"> ngx_http_geoip_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_grpc_module.html" title="ngx_http_grpc_module"> ngx_http_grpc_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_gunzip_module.html" title="ngx_http_gunzip_module"> ngx_http_gunzip_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_gzip_module.html" title="ngx_http_gzip_module"> ngx_http_gzip_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_gzip_static_module.html" title="ngx_http_gzip_static_module"> ngx_http_gzip_static_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_headers_module.html" title="ngx_http_headers_module"> ngx_http_headers_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_hls_module.html" title="ngx_http_hls_module"> ngx_http_hls_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_image_filter_module.html" title="ngx_http_image_filter_module"> ngx_http_image_filter_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_index_module.html" title="ngx_http_index_module"> ngx_http_index_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_js_module.html" title="ngx_http_js_module"> ngx_http_js_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_keyval_module.html" title="ngx_http_keyval_module"> ngx_http_keyval_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_limit_conn_module.html" title="ngx_http_limit_conn_module"> ngx_http_limit_conn_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_limit_req_module.html" title="ngx_http_limit_req_module"> ngx_http_limit_req_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_log_module.html" title="ngx_http_log_module"> ngx_http_log_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_map_module.html" title="ngx_http_map_module"> ngx_http_map_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_memcached_module.html" title="ngx_http_memcached_module"> ngx_http_memcached_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_mirror_module.html" title="ngx_http_mirror_module"> ngx_http_mirror_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_mp4_module.html" title="ngx_http_mp4_module"> ngx_http_mp4_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_perl_module.html" title="ngx_http_perl_module"> ngx_http_perl_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_proxy_module.html" title="ngx_http_proxy_module"> ngx_http_proxy_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_random_index_module.html" title="ngx_http_random_index_module"> ngx_http_random_index_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_realip_module.html" title="ngx_http_realip_module"> ngx_http_realip_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_referer_module.html" title="ngx_http_referer_module"> ngx_http_referer_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_rewrite_module.html" title="ngx_http_rewrite_module"> ngx_http_rewrite_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_scgi_module.html" title="ngx_http_scgi_module"> ngx_http_scgi_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_secure_link_module.html" title="ngx_http_secure_link_module"> ngx_http_secure_link_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_session_log_module.html" title="ngx_http_session_log_module"> ngx_http_session_log_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_slice_module.html" title="ngx_http_slice_module"> ngx_http_slice_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_spdy_module.html" title="ngx_http_spdy_module"> ngx_http_spdy_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_split_clients_module.html" title="ngx_http_split_clients_module"> ngx_http_split_clients_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_ssi_module.html" title="ngx_http_ssi_module"> ngx_http_ssi_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_ssl_module.html" title="ngx_http_ssl_module"> ngx_http_ssl_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_status_module.html" title="ngx_http_status_module"> ngx_http_status_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_stub_status_module.html" title="ngx_http_stub_status_module"> ngx_http_stub_status_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_sub_module.html" title="ngx_http_sub_module"> ngx_http_sub_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_upstream_module.html" title="ngx_http_upstream_module"> ngx_http_upstream_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_upstream_conf_module.html" title="ngx_http_upstream_conf_module"> ngx_http_upstream_conf_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_upstream_hc_module.html" title="ngx_http_upstream_hc_module"> ngx_http_upstream_hc_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_userid_module.html" title="ngx_http_userid_module"> ngx_http_userid_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_uwsgi_module.html" title="ngx_http_uwsgi_module"> ngx_http_uwsgi_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_v2_module.html" title="ngx_http_v2_module"> ngx_http_v2_module </a> </li>
<li class="chapter"> <a href="http-ngx_http_xslt_module.html" title="ngx_http_xslt_module"> ngx_http_xslt_module </a> </li>
<li class="chapter"> <a href="mail-ngx_mail_core_module.html" title="ngx_mail_core_module"> ngx_mail_core_module </a> </li>
<li class="chapter"> <a href="mail-ngx_mail_auth_http_module.html" title="ngx_mail_auth_http_module"> ngx_mail_auth_http_module </a> </li>
<li class="chapter"> <a href="mail-ngx_mail_proxy_module.html" title="ngx_mail_proxy_module"> ngx_mail_proxy_module </a> </li>
<li class="chapter"> <a href="mail-ngx_mail_ssl_module.html" title="ngx_mail_ssl_module"> ngx_mail_ssl_module </a> </li>
<li class="chapter"> <a href="mail-ngx_mail_imap_module.html" title="ngx_mail_imap_module"> ngx_mail_imap_module </a> </li>
<li class="chapter"> <a href="mail-ngx_mail_pop3_module.html" title="ngx_mail_pop3_module"> ngx_mail_pop3_module </a> </li>
<li class="chapter"> <a href="mail-ngx_mail_smtp_module.html" title="ngx_mail_smtp_module"> ngx_mail_smtp_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_core_module.html" title="ngx_stream_core_module"> ngx_stream_core_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_access_module.html" title="ngx_stream_access_module"> ngx_stream_access_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_geo_module.html" title="ngx_stream_geo_module"> ngx_stream_geo_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_geoip_module.html" title="ngx_stream_geoip_module"> ngx_stream_geoip_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_js_module.html" title="ngx_stream_js_module"> ngx_stream_js_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_keyval_module.html" title="ngx_stream_keyval_module"> ngx_stream_keyval_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_limit_conn_module.html" title="ngx_stream_limit_conn_module"> ngx_stream_limit_conn_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_log_module.html" title="ngx_stream_log_module"> ngx_stream_log_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_map_module.html" title="ngx_stream_map_module"> ngx_stream_map_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_proxy_module.html" title="ngx_stream_proxy_module"> ngx_stream_proxy_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_realip_module.html" title="ngx_stream_realip_module"> ngx_stream_realip_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_return_module.html" title="ngx_stream_return_module"> ngx_stream_return_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_split_clients_module.html" title="ngx_stream_split_clients_module"> ngx_stream_split_clients_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_ssl_module.html" title="ngx_stream_ssl_module"> ngx_stream_ssl_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_ssl_preread_module.html" title="ngx_stream_ssl_preread_module"> ngx_stream_ssl_preread_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_upstream_module.html" title="ngx_stream_upstream_module"> ngx_stream_upstream_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_upstream_hc_module.html" title="ngx_stream_upstream_hc_module"> ngx_stream_upstream_hc_module </a> </li>
<li class="chapter"> <a href="stream-ngx_stream_zone_sync_module.html" title="ngx_stream_zone_sync_module"> ngx_stream_zone_sync_module </a> </li>
<li class="chapter"> <a href="ngx_google_perftools_module.html" title="ngx_google_perftools_module"> ngx_google_perftools_module </a> </li>
</ul> </li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<header class="book-header">
<div class="dropdown pull-right js-toolbar-action">
<a class="btn toggle-dropdown" aria-label="Language" href="#">
<i class="fa fa-globe"></i>
</a>
<div class="dropdown-menu dropdown-left">
<div class="dropdown-caret"><span class="caret-outer"></span><span class="caret-inner"></span></div>
<div class="buttons">
<button class="button size-1" onclick="changeLang('zh_CN')">中文</button>
</div>
<div class="buttons">
<button class="button size-1" onclick="changeLang('en_US')">English</button>
</div>
</div>
</div>
<a class="btn pull-right js-toolbar-action non-mobile" aria-label="Sign up" href="register.html">
<i class="fa fa-sign-in"></i> <span>注册</span>
</a>
<a class="btn pull-right js-toolbar-action non-mobile" aria-label="Sign in" href="register.html">
<i class="fa fa-sign-in"></i>
<span>登录</span>
</a>
<a class="btn pull-left js-toolbar-action btn-summary" href="#"><i class="fa fa-align-justify"></i></a>
<div class="dropdown pull-left font-settings js-toolbar-action">
<a class="btn toggle-dropdown" aria-label="Font Settings" href="#">
<i class="fa fa-font"></i>
</a>
<div class="dropdown-menu dropdown-right">
<div class="dropdown-caret"><span class="caret-outer"></span><span class="caret-inner"></span></div>
<div class="buttons">
<button class="button size-2 font-reduce">A</button>
<button class="button size-2 font-enlarge">A</button>
</div>
<div class="buttons">
<button class="button size-2 family-serif">Serif</button>
<button class="button size-2 family-sans">Sans</button>
</div>
<div class="buttons">
<button class="button size-3 theme-white">White</button>
<button class="button size-3 theme-sepia">Sepia</button>
<button class="button size-3 theme-night">Night</button>
</div>
</div>
</div>
<a class="btn pull-left js-toolbar-action non-mobile" aria-label="Home" href="zh.html">
<i class="fa fa-home"></i> <span>首页</span>
</a>
<a class="btn pull-left js-toolbar-action non-mobile" aria-label="Guide" href="javascript:window.open('https://www.javadoc.org/');">
<i class="fa fa-book"></i> <span>API Docs</span>
</a>
<a class="btn pull-left js-toolbar-action non-mobile" aria-label="Tools" href="index1.html">
<i class="fa fa-gears"></i> <span>工具</span>
</a>
<div class="dropdown pull-left js-toolbar-action mobile">
<a class="btn toggle-dropdown" aria-label="Language" href="#">
<i class="fa fa-chevron-down"></i>
</a>
<div class="dropdown-menu dropdown-right">
<div class="dropdown-caret"><span class="caret-outer"></span><span class="caret-inner"></span></div>
<div class="buttons">
<a class="button size-1" aria-label="Home" href="zh.html">
<i class="fa fa-home"></i> <span>首页</span>
</a>
</div>
<div class="buttons">
<a class="button size-1" aria-label="Guide" href="javascript:window.open('https://www.javadoc.org/');">
<i class="fa fa-book"></i> <span>API Docs</span>
</a>
</div>
<div class="buttons">
<a class="button size-1" aria-label="Tools" href="index1.html">
<i class="fa fa-gears"></i> <span>工具</span>
</a>
</div>
</div>
</div>
<div id="autocomplete" class="pull-right"></div>
<span id="toolbar-title"></span>
</header>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<section class="normal markdown-section">
<div id="content">
<h1>Reference</h1>
<div><ins class="adsbygoogle" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-6108808167664152" data-ad-slot="6964403648"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div>
<div><ul>
<li><a href="#http_stream">nginx objects</a>
<ul>
<li><a href="#http">HTTP Request</a></li>
<li><a href="#stream">Stream Session</a></li>
</ul>
</li>
<li><a href="#core">Core</a>
<ul>
<li><a href="#core_global">Global</a></li>
<li><a href="#core_object">Object</a></li>
<li><a href="#string">String</a></li>
<li><a href="#core_typedarray">TypedArray</a></li>
<li><a href="#core_json">JSON</a></li>
<li><a href="#crypto">Crypto</a></li>
<li><a href="#njs_api_timers">Timers</a></li>
<li><a href="#njs_api_fs">File System</a><br><a href="" id="summary"></a></li>
</ul>
</li>
</ul>
<p><a href="njs-index.html">njs</a>提供用于扩展 nginx 功能的对象，方法和属性。</p>
<p><a href="" id="http_stream"></a></p>
<h4 id="nginx-objects"><a href="#nginx-objects" id="nginx-objects"></a>nginx objects</h4>
<p><a href="" id="http"></a></p>
<h4 id="http-request"><a href="#http-request" id="http-request"></a>HTTP Request</h4>
<p>HTTP 请求对象仅在<a href="http-ngx_http_js_module.html">ngx_http_js_module</a>模块中可用。对象的所有字符串属性均为<a href="#string">byte strings</a>。</p>
<h4 id="rargs"><a href="#r_args" id="r_args"></a> r.args{}</h4>
<ul>
<li>
<p>请求参数对象，只读</p>
</li>
<li>
<p><code>r.error(string)</code></p>
<ul>
<li>在记录的<code>error</code>级别上将<code>string</code>写入错误日志</li>
</ul>
</li>
<li>
<p><code>r.finish()</code></p>
<ul>
<li>完成向客户端发送响应</li>
</ul>
</li>
</ul>
<h4 id="rheadersin"><a href="#r_headers_in" id="r_headers_in"></a> r.headersIn{}</h4>
<ul>
<li>传入的 Headers 对象，只读。</li>
</ul>
<p>可以使用以下语法访问<code>Foo</code>请求 Headers：<code>headersIn.foo</code>或<code>headersIn['Foo']</code>。</p>
<p>“授权”，“内容长度”，“内容范围”，“Content Type”，“ ETag”，“期望”，“来自”，“主机”，“ If-Match”，“ If-Modified-从”，“如果没有匹配”，“如果范围”，“如果未经修改以来”，“最大转发”，“代理授权”，“推荐人”，“传输编码”和“用户” -Agent”请求 Headers 只能有一个字段值(<a href="njs-changes.html#njs0.4.1">0.4.1</a>)。 “ Cookie”标题中重复的字段值用分号(<code>;</code>)分隔。所有其他请求 Headers 中的重复字段值均以逗号分隔。</p>
<h4 id="rheadersout"><a href="#r_headers_out" id="r_headers_out"></a> r.headersOut{}</h4>
<ul>
<li>传出 Headers 对象，可写。</li>
</ul>
<p>可以使用以下语法访问“ Foo”响应头：<code>headersOut.foo</code>或<code>headersOut['Foo']</code>。</p>
<p>可以使用以下语法设置多值响应 Headers(<a href="njs-changes.html#njs0.4.0">0.4.0</a>)的字段值：</p>
<pre><code class="hljs language-shell">r.headersOut['Foo'] = ['a', 'b']
</code></pre>
<p>输出将是：</p>
<pre><code class="hljs language-shell">Foo: a
Foo: b
</code></pre>
<p>“ Foo”响应标题的所有先前字段值将被删除。</p>
<p>对于仅接受单个字段值(例如“ Content-Type”)的标准响应 Headers，只有数组的最后一个元素才会生效。 “ Set-Cookie”响应 Headers 的字段值始终以数组形式返回。 “ Age”，“ Content-Encoding”，“ Content-Length”，“ Content-Type”，“ ETag”，“ Expires”，“ Last-Modified”，“ Location”，“ Retry-After”响应中的字段值重复 Headers 将被忽略。所有其他响应 Headers 中的重复字段值均以逗号分隔。</p>
<ul>
<li>
<p><code>r.httpVersion</code></p>
<ul>
<li>HTTP 版本，只读</li>
</ul>
</li>
</ul>
<h4 id="rinternalredirecturi"><a href="#r_internal_redirect" id="r_internal_redirect"></a> r.internalRedirect(uri)</h4>
<ul>
<li>
<p>执行内部重定向到指定的<code>uri</code>。如果 uri 以“ <code>@</code>”前缀开头，则将其视为命名位置。实际的重定向发生在处理程序执行完成之后。</p>
</li>
<li>
<p><code>r.log(string)</code></p>
<ul>
<li>在记录的<code>info</code>级别上将<code>string</code>写入错误日志</li>
</ul>
</li>
<li>
<p><code>r.method</code></p>
<ul>
<li>HTTP 方法，只读</li>
</ul>
</li>
</ul>
<h4 id="rparent"><a href="#r_parent" id="r_parent"></a> r.parent</h4>
<ul>
<li>
<p>引用父请求对象</p>
</li>
<li>
<p><code>r.remoteAddress</code></p>
<ul>
<li>客户地址，只读</li>
</ul>
</li>
</ul>
<h4 id="rrawheadersin"><a href="#r_raw_headers_in" id="r_raw_headers_in"></a> r.rawHeadersIn{}</h4>
<ul>
<li>返回键值对的数组，该键值对与从客户端(<a href="njs-changes.html#njs0.4.1">0.4.1</a>)收到的键值对完全相同。</li>
</ul>
<p>例如，具有以下请求 Headers：</p>
<pre><code class="hljs language-shell">Host: localhost
Foo:  bar
foo:  bar2
</code></pre>
<p><code>r.rawHeadersIn</code>的输出为：</p>
<pre><code class="hljs language-shell">[
    ['Host', 'localhost'],
    ['Foo', 'bar'],
    ['foo', 'bar2']
]
</code></pre>
<p>可以使用以下语法收集所有<code>foo</code>Headers：</p>
<pre><code class="hljs language-shell">r.rawHeadersIn.filter(v=&gt;v[0].toLowerCase() == 'foo').map(v=&gt;v[1])
</code></pre>
<p>输出将是：</p>
<pre><code class="hljs language-shell">['bar', 'bar2']
</code></pre>
<p>标题字段名称不会转换为小写，重复的字段值不会合并。</p>
<h4 id="rrawheadersout"><a href="#r_raw_headers_out" id="r_raw_headers_out"></a> r.rawHeadersOut{}</h4>
<ul>
<li>返回响应 Headers(<a href="njs-changes.html#njs0.4.1">0.4.1</a>)的键值对数组。标题字段名称不会转换为小写，重复的字段值不会合并。</li>
</ul>
<h4 id="rrequestbody"><a href="#r_request_body" id="r_request_body"></a> r.requestBody</h4>
<ul>
<li>如果尚未将客户请求主体写入临时文件，则返回该请求主体。为确保客户端请求主体在内存中，其大小应受<a href="http-ngx_http_core_module.html#client_max_body_size">client_max_body_size</a>限制，并应使用<a href="http-ngx_http_core_module.html#client_body_buffer_size">client_body_buffer_size</a>设置足够的缓冲区大小。该属性仅在<a href="http-ngx_http_js_module.html#js_content">js_content</a>指令中可用。</li>
</ul>
<h4 id="rresponsebody"><a href="#r_response_body" id="r_response_body"></a> r.responseBody</h4>
<ul>
<li>
<p>保留<a href="#subrequest">subrequest</a>响应正文(只读)。 <code>r.responseBody</code>的大小受<a href="http-ngx_http_core_module.html#subrequest_output_buffer_size">subrequest_output_buffer_size</a>指令限制。</p>
</li>
<li>
<p><code>r.return(status[, string])</code></p>
<ul>
<li>将带有指定的<code>status</code>的整个响应发送给客户端</li>
</ul>
</li>
</ul>
<p>可以指定重定向 URL(对于代码 301、302、303、307 和 308)或响应正文(对于其他代码)作为第二个参数</p>
<ul>
<li>
<p><code>r.send(string)</code></p>
<ul>
<li>将响应主体的一部分发送给客户端</li>
</ul>
</li>
<li>
<p><code>r.sendHeader()</code></p>
<ul>
<li>将 HTTP Headers 发送到客户端</li>
</ul>
</li>
<li>
<p><code>r.status</code></p>
<ul>
<li>status, writable</li>
</ul>
</li>
</ul>
<h4 id="rsubrequesturi-options-callback"><a href="#subrequest" id="subrequest"></a> r.subrequest(uri[, options[, callback]])</h4>
<ul>
<li>使用给定的<code>uri</code>和<code>options</code>创建一个子请求，并安装可选的完成<code>callback</code>。</li>
</ul>
<p><a href="dev-development_guide.html#http_subrequests">subrequest</a>与客户端请求共享其输入 Headers。要将不同于原始头的头发送到代理服务器，可以使用<a href="http-ngx_http_proxy_module.html#proxy_set_header">proxy_set_header</a>指令。要将全新的 Headers 集发送到代理服务器，可以使用<a href="http-ngx_http_proxy_module.html#proxy_pass_request_headers">proxy_pass_request_headers</a>指令。</p>
<p>如果<code>options</code>是字符串，则它包含子请求参数字符串。否则，<code>options</code>应该是具有以下键的对象：</p>
<ul>
<li>
<p><code>args</code></p>
<ul>
<li>
<p>参数字符串，默认情况下使用空字符串</p>
</li>
<li>
<p><code>body</code></p>
<ul>
<li>请求正文，默认情况下使用父请求对象的请求正文</li>
</ul>
</li>
<li>
<p><code>method</code></p>
<ul>
<li>HTTP 方法，默认情况下使用<code>GET</code>方法</li>
</ul>
</li>
<li>
<p><code>detached</code></p>
<ul>
<li>布尔标志(<a href="njs-changes.html#njs0.3.9">0.3.9</a>)，如果为<code>true</code>，则创建的子请求为分离的子请求。对分离的子请求的响应将被忽略。与普通的子请求不同，可以在变量处理程序内部创建分离的子请求。分离标志和回调参数是互斥的。</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>完成<code>callback</code>接收一个子请求响应对象，该对象的方法和属性与父请求对象相同。</p>
<p>由于<a href="njs-changes.html#njs0.3.8">0.3.8</a>，如果未提供<code>callback</code>，则返回解析为子请求响应对象的<code>Promise</code>对象。</p>
<h4 id="ruri"><a href="#r_uri" id="r_uri"></a> r.uri</h4>
<ul>
<li>当前<a href="http-ngx_http_core_module.html#var_uri">URI</a>请求，<a href="http-ngx_http_core_module.html#location">normalized</a>，只读</li>
</ul>
<h4 id="rvariables"><a href="#r_variables" id="r_variables"></a> r.variables{}</h4>
<ul>
<li>
<p>nginx 变量对象，可写(自<a href="njs-changes.html#njs0.2.8">0.2.8</a>以来)</p>
</li>
<li>
<p><code>r.warn(string)</code></p>
<ul>
<li>在记录的<code>warning</code>级别上将<code>string</code>写入错误日志</li>
</ul>
</li>
</ul>
<p><a href="" id="stream"></a></p>
<h4 id="stream-session"><a href="#stream-session" id="stream-session"></a>Stream Session</h4>
<p>流会话对象仅在<a href="stream-ngx_stream_js_module.html">ngx_stream_js_module</a>模块中可用。对象的所有字符串属性均为<a href="#string">byte strings</a>。</p>
<h4 id="sallow"><a href="#s_allow" id="s_allow"></a> s.allow()</h4>
<ul>
<li>成功完成阶段处理程序(<a href="njs-changes.html#njs0.2.4">0.2.4</a>)</li>
</ul>
<h4 id="sdecline"><a href="#s_decline" id="s_decline"></a> s.decline()</h4>
<ul>
<li>完成阶段处理程序并将控制权传递给下一个处理程序(<a href="njs-changes.html#njs0.2.4">0.2.4</a>)</li>
</ul>
<h4 id="sdeny"><a href="#s_deny" id="s_deny"></a> s.deny()</h4>
<ul>
<li>使用访问错误代码(<a href="njs-changes.html#njs0.2.4">0.2.4</a>)完成阶段处理程序</li>
</ul>
<h4 id="sdone-code"><a href="#s_done" id="s_done"></a> s.done( [code])</h4>
<ul>
<li>
<p>成功完成当前阶段处理程序或使用指定的数字代码(<a href="njs-changes.html#njs0.2.4">0.2.4</a>)完成它。</p>
</li>
<li>
<p><code>s.error(string)</code></p>
<ul>
<li>在日志记录<code>error</code>级别上将已发送的<code>string</code>写入错误日志</li>
</ul>
</li>
<li>
<p><code>s.log(string)</code></p>
<ul>
<li>在日志记录<code>info</code>级别上将已发送的<code>string</code>写入错误日志</li>
</ul>
</li>
</ul>
<h4 id="soffeventname"><a href="#s_off" id="s_off"></a> s.off(eventName)</h4>
<ul>
<li>注销<a href="#s_on">s.on()</a>方法(<a href="njs-changes.html#njs0.2.4">0.2.4</a>)设置的回调</li>
</ul>
<h4 id="sonevent-callback"><a href="#s_on" id="s_on"></a> s.on(event, callback)</h4>
<ul>
<li>为指定的<code>event</code>(<a href="njs-changes.html#njs0.2.4">0.2.4</a>)注册一个<code>callback</code>。</li>
</ul>
<p><code>event</code>可能是以下字符串之一：</p>
<ul>
<li>
<p><code>upload</code></p>
<ul>
<li>
<p>来自客户端的新数据</p>
</li>
<li>
<p><code>download</code></p>
<ul>
<li>给客户的新数据</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>完成回调具有以下原型：<code>callback(data, flags)</code>，其中<code>data</code>是字符串，<code>flags</code>是具有以下属性的对象：</p>
<h4 id="last"><a href="#s_on_callback_last" id="s_on_callback_last"></a> last</h4>
<pre><code class="hljs language-shell"> - a boolean value, true if data is a last buffer\.
</code></pre>
<ul>
<li>
<p><code>s.remoteAddress</code></p>
<ul>
<li>客户地址，只读</li>
</ul>
</li>
</ul>
<h4 id="ssenddata-options"><a href="#s_send" id="s_send"></a> s.send(data[, options])</h4>
<ul>
<li>
<p>将数据发送到客户端(<a href="njs-changes.html#njs0.2.4">0.2.4</a>)。 <code>options</code>是用于覆盖从传入数据块缓冲区派生的 nginx 缓冲区标志的对象。这些标志可以用以下标志覆盖：</p>
</li>
<li>
<p><code>last</code></p>
<ul>
<li>
<p>布尔值，如果缓冲区是最后一个缓冲区，则为 true</p>
</li>
<li>
<p><code>flush</code></p>
<ul>
<li>布尔值，如果缓冲区应具有<code>flush</code>标志，则为 true</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>每次回调调用可以多次调用该方法。</p>
<h4 id="svariables"><a href="#s_variables" id="s_variables"></a> s.variables{}</h4>
<ul>
<li>
<p>nginx 变量对象，可写(自<a href="njs-changes.html#njs0.2.8">0.2.8</a>以来)</p>
</li>
<li>
<p><code>s.warn(string)</code></p>
<ul>
<li>在日志记录<code>warning</code>级别上将已发送的<code>string</code>写入错误日志</li>
</ul>
</li>
</ul>
<p><a href="" id="core"></a></p>
<h4 id="core"><a href="#core" id="core"></a>Core</h4>
<p><a href="" id="core_global"></a></p>
<h4 id="global"><a href="#global" id="global"></a>Global</h4>
<p><a href="" id="process"></a></p>
<h4 id="process"><a href="#process" id="process"></a>Process</h4>
<p><code>process</code>对象是一个全局对象，提供有关当前进程(<a href="njs-changes.html#njs0.3.3">0.3.3</a>)的信息。</p>
<h4 id="processargv"><a href="#process_argv" id="process_argv"></a> process.argv</h4>
<ul>
<li>返回一个数组，其中包含启动当前进程时传递的命令行参数。</li>
</ul>
<h4 id="processenv"><a href="#process_env" id="process_env"></a> process.env</h4>
<ul>
<li>返回一个包含用户环境的对象。</li>
</ul>
<div class="alert callout info"><p class="title"><i class="fa fa-info-circle"></i>Note</p><div><p>默认情况下，nginx 会删除从其父进程继承的所有环境变量(TZ 变量除外)。使用<a href="ngx_core_module.html#env">env</a>指令保留一些继承的变量。</p>
</div></div>
<h4 id="processpid"><a href="#process_pid" id="process_pid"></a> process.pid</h4>
<ul>
<li>返回当前进程的 PID。</li>
</ul>
<h4 id="processppid"><a href="#process_ppid" id="process_ppid"></a> process.ppid</h4>
<ul>
<li>返回当前父进程的 PID。</li>
</ul>
<p><a href="" id="core_object"></a></p>
<h4 id="object"><a href="#object" id="object"></a>Object</h4>
<p><code>Object</code>构造函数对应于标准 JS 对象。</p>
<h4 id="objectentriesobject"><a href="#object_entries" id="object_entries"></a> Object.entries(object)</h4>
<ul>
<li>返回给定<code>object</code>(<a href="njs-changes.html#njs0.2.7">0.2.7</a>)的所有可枚举属性<code>[key, value]</code>对的数组。</li>
</ul>
<h4 id="objectvaluesobject"><a href="#object_values" id="object_values"></a> Object.values(object)</h4>
<ul>
<li>返回给定<code>object</code>(<a href="njs-changes.html#njs0.2.7">0.2.7</a>)的所有可枚举属性值的数组。</li>
</ul>
<p><a href="" id="string"></a></p>
<h4 id="string"><a href="#string" id="string"></a>String</h4>
<p>njs 中有两种类型的字符串：Unicode 字符串(默认)和字节字符串。</p>
<p>Unicode 字符串对应于包含 Unicode 字符的 ECMAScript 字符串。</p>
<p>字节字符串包含一个字节序列，用于将 Unicode 字符串序列化为外部数据并从外部源反序列化。例如，<a href="#string_toutf8">toUTF8()</a>方法使用 UTF8 编码将 Unicode 字符串序列化为字节字符串：</p>
<pre><code class="hljs language-shell">&gt;&gt; '£'.toUTF8().toString('hex')
'c2a3'  /* C2 A3 is the UTF8 representation of 00A3 ('£') code point */
</code></pre>
<p><a href="#string_tobytes">toBytes()</a>方法将代码点最多为 255 的 Unicode 字符串序列化为字节字符串，否则返回<code>null</code>：</p>
<pre><code class="hljs language-shell">&gt;&gt; '£'.toBytes().toString('hex')
'a3'  /* a3 is a byte equal to 00A3 ('£') code point  */
</code></pre>
<p>只能将字节字符串转换为不同的编码。例如，字符串不能直接编码为<code>hex</code>：</p>
<pre><code class="hljs language-shell">&gt;&gt; 'αβγδ'.toString('base64')
TypeError: argument must be a byte string
    at String.prototype.toString (native)
    at main (native)
</code></pre>
<p>要将 Unicode 字符串转换为十六进制，首先，应将其转换为字节字符串，然后再转换为十六进制：</p>
<pre><code class="hljs language-shell">&gt;&gt; 'αβγδ'.toUTF8().toString('base64')
'zrHOss6zzrQ='
</code></pre>
<h4 id="stringbytesfrom数组字符串编码"><a href="#string_bytesfrom" id="string_bytesfrom"></a> String.bytesFrom(数组|字符串，编码)</h4>
<ul>
<li>(特定于 njs)从包含八位字节的数组或从编码的字符串(<a href="njs-changes.html#njs0.2.3">0.2.3</a>)创建字节字符串。编码可以是<code>hex</code>，<code>base64</code>和<code>base64url</code>。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; String.bytesFrom([0x62, 0x75, 0x66, 0x66, 0x65, 0x72])
'buffer'

&gt;&gt; String.bytesFrom('YnVmZmVy', 'base64')
'buffer'
</code></pre>
<h4 id="stringfromcharcodecharcode1--charcoden"><a href="#string_fromcharcode" id="string_fromcharcode"></a> String.fromCharCode(CharCode1[, ...[, CharCodeN]])</h4>
<ul>
<li>从一个或多个 Unicode 代码点返回一个字符串。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; String.fromCharCode(97, 98, 99, 100)
'abcd'
</code></pre>
<h4 id="stringfromcodepointcodepoint1--codepoint2"><a href="#string_fromcodepoint" id="string_fromcodepoint"></a> String.fromCodePoint(codePoint1[, ...[, codePoint2]])</h4>
<ul>
<li>从一个或多个 Unicode 代码点返回一个字符串。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; String.fromCodePoint(97, 98, 99, 100)
'abcd'
</code></pre>
<h4 id="stringprototypecharatindex"><a href="#string_charat" id="string_charat"></a> String.prototype.charAt(index)</h4>
<ul>
<li>返回一个字符串，该字符串表示指定的<code>index</code>处的一个 Unicode 代码单元；如果索引超出范围，则为空字符串。索引可以是 0 到 1 之间的整数，小于字符串的长度。如果未提供索引，则默认值为<code>0</code>，因此返回字符串中的第一个字符。</li>
</ul>
<h4 id="stringprototypecodepointatposition"><a href="#string_codepointat" id="string_codepointat"></a> String.prototype.CodePointAt(position)</h4>
<ul>
<li>返回一个数字，该数字表示给定<code>position</code>处字符的代码点值； <code>undefined</code>，如果位置上没有元素。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; 'ABCD'.codePointAt(3);
68
</code></pre>
<h4 id="stringprototypeconcatstring1字符串--n"><a href="#string_concat" id="string_concat"></a> String.prototype.concat(string1[，...，字符串 N])</h4>
<ul>
<li>返回一个字符串，其中包含指定的<code>strings</code>的串联。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; &quot;a&quot;.concat(&quot;b&quot;, &quot;c&quot;)
'abc'
</code></pre>
<h4 id="stringprototypeendswithsearchstring-length"><a href="#string_endswith" id="string_endswith"></a> String.prototype.endsWith(searchString[, length])</h4>
<ul>
<li>如果字符串以指定字符串的字符结尾，则返回<code>true</code>，否则返回<code>false</code>。可选的<code>length</code>参数是字符串的长度。如果省略，则默认值为字符串的长度。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; 'abc'.endsWith('abc')
true
&gt;&gt; 'abca'.endsWith('abc')
false
</code></pre>
<h4 id="stringprototypefrombytesstart-end"><a href="#string_frombytes" id="string_frombytes"></a> String.prototype.fromBytes(start[, end])</h4>
<ul>
<li>(特定于 njs)从字节字符串返回一个新的 Unicode 字符串，其中每个字节均被一个对应的 Unicode 代码点替换。</li>
</ul>
<h4 id="stringprototypefromutf8start-end"><a href="#string_fromutf8" id="string_fromutf8"></a> String.prototype.fromUTF8(start[, end])</h4>
<ul>
<li>(特定于 njs)将包含有效 UTF8 字符串的字节字符串转换为 Unicode 字符串，否则返回<code>null</code>。</li>
</ul>
<h4 id="stringprototypeincludessearchstring-position"><a href="#string_includes" id="string_includes"></a> String.prototype.includes(searchString[, position]))</h4>
<ul>
<li>如果在另一个字符串中找到一个字符串，则返回<code>true</code>，否则返回<code>false</code>。可选的<code>position</code>参数是字符串中开始搜索<code>searchString</code>的位置。预设值为 0.</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; 'abc'.includes('bc')
true
</code></pre>
<h4 id="stringprototypeindexofsearchstring-fromindex"><a href="#string_indexof" id="string_indexof"></a> String.prototype.indexOf(searchString[, fromIndex])</h4>
<ul>
<li>返回第一次出现<code>searchString</code>的位置。搜索从<code>fromIndex</code>开始。如果找不到该值，则返回<code>-1</code>。 <code>fromIndex</code>是整数，默认值为 0.如果<code>fromIndex</code>小于 0 或大于<a href="#string_length">String.prototype.length</a>``，则搜索从索引<code>0</code>和<code>String.prototype.length</code>开始。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; 'abcdef'.indexOf('de', 2)
3
</code></pre>
<h4 id="stringprototypelastindexofsearchstring-fromindex"><a href="#string_lastindexof" id="string_lastindexof"></a> String.prototype.lastIndexOf(searchString[, fromIndex])</h4>
<ul>
<li>返回上一次出现的<code>searchString</code>的位置，从<code>fromIndex</code>向后搜索。如果找不到该值，则返回<code>-1</code>。如果<code>searchString</code>为空，则返回<code>fromIndex</code>。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; &quot;nginx&quot;.lastIndexOf(&quot;gi&quot;)
1
</code></pre>
<h4 id="stringprototypelength"><a href="#string_length" id="string_length"></a> String.prototype.length</h4>
<ul>
<li>返回字符串的长度。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; 'αβγδ'.length
4
</code></pre>
<h4 id="stringprototypematchregexp"><a href="#string_match" id="string_match"></a> String.prototype.match([regexp])</h4>
<ul>
<li>将字符串与<code>regexp</code>匹配。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; 'nginx'.match( /ng/i )
'ng'
</code></pre>
<h4 id="stringprototypepadendlength--string"><a href="#string_padend" id="string_padend"></a> String.prototype.padEnd(length [, string])</h4>
<ul>
<li>返回指定的<code>length</code>的字符串，并在指定的字符串(<a href="njs-changes.html#njs0.2.3">0.2.3</a>)的末尾加上填充符<code>string</code>。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; '1234'.padEnd(8, 'abcd')
'1234abcd'
</code></pre>
<h4 id="stringprototypepadstartlength--string"><a href="#string_padstart" id="string_padstart"></a> String.prototype.padStart(length [, string])</h4>
<ul>
<li>返回指定的<code>length</code>的字符串，并将填充符<code>string</code>应用于指定的字符串(<a href="njs-changes.html#njs0.2.3">0.2.3</a>)的开头。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; '1234'.padStart(8, 'abcd')
'abcd1234'
</code></pre>
<h4 id="stringprototyperepeatnumber"><a href="#string_repeat" id="string_repeat"></a> String.prototype.repeat(number)</h4>
<ul>
<li>返回具有指定字符串副本<code>number</code>的字符串。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; 'abc'.repeat(3)
'abcabcabc'
</code></pre>
<h4 id="stringprototypereplaceregexpstring-stringfunction"><a href="#string_replace" id="string_replace"></a> String.prototype.replace([regexp|string[, string|function]])</h4>
<ul>
<li>返回一个新的字符串，该字符串具有匹配的模式(<code>string</code>或<code>regexp</code>)，并替换为<code>string</code>或<code>function</code>。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; 'abcdefgh'.replace('d', 1)
'abc1efgh'
</code></pre>
<h4 id="stringprototypesearchregexp"><a href="#string_search" id="string_search"></a> String.prototype.search([regexp])</h4>
<ul>
<li>使用<code>regexp</code>搜索字符串</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; 'abcdefgh'.search('def')
3
</code></pre>
<h4 id="stringprototypeslicestart-end"><a href="#string_slice" id="string_slice"></a> String.prototype.slice(start[, end])</h4>
<ul>
<li>返回一个新字符串，其中包含<code>start</code>和<code>end</code>之间或从<code>start</code>到字符串末尾的原始字符串的一部分。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; 'abcdefghijklmno'.slice(NaN, 5)
'abcde'
</code></pre>
<h4 id="stringprototypesplitstringregexp-limit"><a href="#string_split" id="string_split"></a> String.prototype.split(([string|regexp[, limit]]))</h4>
<ul>
<li>返回与<code>regexp</code>匹配的字符串。可选的<code>limit</code>参数是一个整数，它指定要找到的分割数的限制。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; 'abc'.split('')
[
 'a',
 'b',
 'c'
]
</code></pre>
<h4 id="stringprototypestartswithsearchstring-position"><a href="#string_startswith" id="string_startswith"></a> String.prototype.startsWith(searchString[, position])</h4>
<ul>
<li>如果字符串以指定字符串的字符开头，则返回<code>true</code>，否则返回<code>false</code>。可选的<code>position</code>参数是此字符串中开始搜索<code>searchString</code>的位置。预设值为 0.</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; 'abc'.startsWith('abc')
true
&gt; 'aabc'.startsWith('abc')
false
</code></pre>
<h4 id="stringprototypesubstrstart-length"><a href="#string_substr" id="string_substr"></a> String.prototype.substr(start[, length])</h4>
<ul>
<li>从<code>start</code>或<code>start</code>返回指定的<code>length</code>字符串的一部分到字符串的末尾。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt;  'abcdefghijklmno'.substr(3, 5)
'defgh'
</code></pre>
<h4 id="stringprototypesubstringstart-end"><a href="#string_substring" id="string_substring"></a> String.prototype.substring(start[, end])</h4>
<ul>
<li>返回介于<code>start</code>和<code>end</code>之间或从<code>start</code>到字符串末尾的字符串部分。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; 'abcdefghijklmno'.substring(3, 5)
'de'
</code></pre>
<h4 id="stringprototypetobytesstart-end"><a href="#string_tobytes" id="string_tobytes"></a> String.prototype.toBytes(start[, end])</h4>
<ul>
<li>(特定于 njs)将 Unicode 字符串序列化为字节字符串。如果在字符串中找到大于 255 的字符，则返回<code>null</code>。</li>
</ul>
<h4 id="stringprototypetolowercase"><a href="#string_tolowercase" id="string_tolowercase"></a> String.prototype.toLowerCase()</h4>
<ul>
<li>将字符串转换为小写。该方法仅支持简单的 Unicode 折叠。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; 'ΑΒΓΔ'.toLowerCase()
'αβγδ'
</code></pre>
<ul>
<li>
<p><code>String.prototype.toString([encoding])</code></p>
<ul>
<li>如果未指定<code>encoding</code>，则返回与 ECMAScript 中相同的指定 Unicode 字符串或字节字符串。</li>
</ul>
</li>
</ul>
<p>(特定于 njs)如果指定<code>encoding</code>，则将<a href="#string_tobytes">byte string</a>编码为<code>hex</code>，<code>base64</code>或<code>base64url</code>。</p>
<pre><code class="hljs language-shell">&gt;&gt;  'αβγδ'.toUTF8().toString('base64url')
'zrHOss6zzrQ'
</code></pre>
<h4 id="stringprototypetouppercase"><a href="#string_touppercase" id="string_touppercase"></a> String.prototype.toUpperCase()</h4>
<ul>
<li>将字符串转换为大写。该方法仅支持简单的 Unicode 折叠。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; 'αβγδ'.toUpperCase()
'ΑΒΓΔ'
</code></pre>
<h4 id="stringprototypetoutf8start-end"><a href="#string_toutf8" id="string_toutf8"></a> String.prototype.toUTF8(start[, end])</h4>
<ul>
<li>(特定于 njs)使用 UTF8 编码将 Unicode 字符串序列化为字节字符串。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; 'αβγδ'.toUTF8().length
8
&gt;&gt; 'αβγδ'.length
4
</code></pre>
<h4 id="stringprototypetrim"><a href="#string_trim" id="string_trim"></a> String.prototype.trim()</h4>
<ul>
<li>从字符串的两端删除空格。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; '   abc  '.trim()
'abc'
</code></pre>
<h4 id="stringprototypetrimend"><a href="#string_trimend" id="string_trimend"></a> String.prototype.trimEnd()</h4>
<ul>
<li>从字符串(<a href="njs-changes.html#njs0.3.4">0.3.4</a>)末尾删除空格。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; '   abc  '.trimEnd()
'   abc'
</code></pre>
<h4 id="stringprototypetrimstart"><a href="#string_trimstart" id="string_trimstart"></a> String.prototype.trimStart()</h4>
<ul>
<li>从字符串的开头(<a href="njs-changes.html#njs0.3.4">0.3.4</a>)删除空格。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; '   abc  '.trimStart()
'abc  '
</code></pre>
<h4 id="encodeuriuri"><a href="#encodeuri" id="encodeuri"></a> encodeURI(URI)</h4>
<ul>
<li>通过用表示字符的 UTF-8 编码的一个，两个，三个或四个转义序列替换某些字符的每个实例来对 URI 进行编码</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; encodeURI('012αβγδ')
'012%CE%B1%CE%B2%CE%B3%CE%B4'
</code></pre>
<h4 id="encodeuricomponentencodeduristring"><a href="#encodeuricomponent" id="encodeuricomponent"></a> encodeURIComponent(encodedURIString)</h4>
<ul>
<li>通过用表示字符的 UTF-8 编码的一个，两个，三个或四个转义序列替换某些字符的每个实例来对 URI 进行编码。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; encodeURIComponent('[@?=')
'%5B%40%3F%3D'
</code></pre>
<h4 id="decodeuriencodeduri"><a href="#decodeuri" id="decodeuri"></a> decodeURI(encodedURI)</h4>
<ul>
<li>解码以前的<a href="#encodeuri">encoded</a> URI。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; decodeURI('012%CE%B1%CE%B2%CE%B3%CE%B4')
'012αβγδ'
</code></pre>
<h4 id="decodeuricomponentdecodeduristring"><a href="#decodeuricomponent" id="decodeuricomponent"></a> decodeURIComponent(decodedURIString)</h4>
<ul>
<li>解码先前编码的 URI 的编码组件。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; decodeURIComponent('%5B%40%3F%3D')
'[@?='
</code></pre>
<p><a href="" id="core_typedarray"></a></p>
<h4 id="typedarray"><a href="#typedarray" id="typedarray"></a>TypedArray</h4>
<p><code>TypedArray</code>是许多不同的全局属性，其值是特定元素类型的类型化数组构造函数。</p>
<h4 id="typedarrayprototypesort"><a href="#array_sort" id="array_sort"></a> TypedArray.prototype.sort()</h4>
<ul>
<li>对类型化数组的元素进行数字排序，并返回更新的类型化数组(<a href="njs-changes.html#njs0.4.2">0.4.2</a>)。</li>
</ul>
<p><a href="" id="core_json"></a></p>
<h4 id="json"><a href="#json" id="json"></a>JSON</h4>
<p><code>JSON</code>对象(ES 5.1)提供了用于将 njs 值与 JSON 格式相互转换的功能。</p>
<h4 id="jsonparsestring-reviver"><a href="#core_json_parse" id="core_json_parse"></a> JSON.parse(string[, reviver])</h4>
<ul>
<li>将表示 JSON 数据的<code>string</code>转换为 njs 对象(<code>{...}</code>)或数组(<code>[...]</code>)。可选的<code>reviver</code>参数是将对每个(键，值)对调用的函数(键，值)，并且可以转换该值。</li>
</ul>
<h4 id="jsonstringifyvalue-replacer--space"><a href="#core_json_stringify" id="core_json_stringify"></a> JSON.stringify(value[, replacer] [, space])</h4>
<ul>
<li>将 njs 对象转换回 JSON。必填<code>value</code>参数通常是将要转换的 JSON <code>object</code>或<code>array</code>。如果该值具有<code>toJSON()</code>方法，则它定义对象的序列化方式。可选的<code>replacer</code>参数是用于转换结果的<code>function</code>或<code>array</code>。可选的<code>space</code>参数是<code>string</code>或<code>number</code>。如果它是<code>number</code>，则表示结果前放置的空格数(不超过 10)。如果它是<code>string</code>，它将用作空白(或其前 10 个字符)。如果省略或为<code>null</code>，则不使用空格。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; var json = JSON.parse('{&quot;a&quot;:1, &quot;b&quot;:true}')
&gt;&gt; json.a
1

&gt;&gt; JSON.stringify(json)
'{&quot;a&quot;:1,&quot;b&quot;:true}'

&gt;&gt; JSON.stringify({ x: [10, undefined, function(){}] })
'{&quot;x&quot;:[10,null,null]}'

&gt;&gt; JSON.stringify({&quot;a&quot;:1, &quot;toJSON&quot;: function() {return &quot;xxx&quot;}})
'&quot;xxx&quot;'

# Example with function replacer

&gt;&gt; function replacer(key, value) {return (typeof value === 'string') ? undefined : value}
&gt;&gt;JSON.stringify({a:1, b:&quot;b&quot;, c:true}, replacer)
'{&quot;a&quot;:1,&quot;c&quot;:true}'
</code></pre>
<p><a href="" id="crypto"></a></p>
<h4 id="crypto"><a href="#crypto" id="crypto"></a>Crypto</h4>
<p>加密模块提供加密功能支持。加密模块对象由<code>require('crypto')</code>返回。</p>
<h4 id="cryptocreatehashalgorithm"><a href="#crypto_createhash" id="crypto_createhash"></a> crypto.createHash(algorithm)</h4>
<ul>
<li>创建并返回一个<a href="#crypto_hash">Hash</a>对象，该对象可用于使用给定的<code>algorithm</code>生成哈希摘要。该算法可以是<code>md5</code>，<code>sha1</code>和<code>sha256</code>。</li>
</ul>
<h4 id="cryptocreatehmac算法密钥"><a href="#crypto_createhmac" id="crypto_createhmac"></a> crypto.createHmac(算法，密钥)</h4>
<ul>
<li>创建并返回使用给定的<code>algorithm</code>和<code>secret key</code>的<a href="#crypto_hmac">HMAC</a>对象。该算法可以是<code>md5</code>，<code>sha1</code>和<code>sha256</code>。</li>
</ul>
<p><a href="" id="crypto_hash"></a></p>
<h4 id="hash"><a href="#hash" id="hash"></a>Hash</h4>
<ul>
<li>
<p><code>hash.update(data)</code></p>
<ul>
<li>使用给定的<code>data</code>更新哈希内容。</li>
</ul>
</li>
<li>
<p><code>hash.digest([encoding])</code></p>
<ul>
<li>计算使用<code>hash.update()</code>传递的所有数据的摘要。编码可以是<code>hex</code>，<code>base64</code>和<code>base64url</code>。如果未提供编码，则返回字节字符串。</li>
</ul>
</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; var cr = require('crypto')
undefined

&gt;&gt; cr.createHash('sha1').update('A').update('B').digest('base64url')
'BtlFlCqiamG-GMPiK_GbvKjdK10'
</code></pre>
<p><a href="" id="crypto_hmac"></a></p>
<h4 id="hmac"><a href="#hmac" id="hmac"></a>HMAC</h4>
<ul>
<li>
<p><code>hmac.update(data)</code></p>
<ul>
<li>使用给定的<code>data</code>更新 HMAC 内容。</li>
</ul>
</li>
<li>
<p><code>hmac.digest([encoding])</code></p>
<ul>
<li>计算使用<code>hmac.update()</code>传递的所有数据的 HMAC 摘要。编码可以是<code>hex</code>，<code>base64</code>和<code>base64url</code>。如果未提供编码，则返回字节字符串。</li>
</ul>
</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; var cr = require('crypto')
undefined

&gt;&gt; cr.createHmac('sha1', 'secret.key').update('AB').digest('base64url')
'Oglm93xn23_MkiaEq_e9u8zk374'
</code></pre>
<p><a href="" id="njs_api_timers"></a></p>
<h4 id="timers"><a href="#timers" id="timers"></a>Timers</h4>
<h4 id="cleartimeouttimeout"><a href="#cleartimeout" id="cleartimeout"></a> clearTimeout(timeout)</h4>
<ul>
<li>取消由<a href="#settimeout">setTimeout()</a>创建的<code>timeout</code>对象。</li>
</ul>
<h4 id="settimeoutfunction-msarg1argn"><a href="#settimeout" id="settimeout"></a> setTimeout(function, ms[，arg1，argN])</h4>
<ul>
<li>在指定数量的<code>milliseconds</code>之后调用<code>function</code>。可以将一个或多个可选<code>arguments</code>传递给指定的函数。返回一个<code>timeout</code>对象。</li>
</ul>
<pre><code class="hljs language-shell">function handler(v)
{
    // ...
}

t = setTimeout(handler, 12);

// ...

clearTimeout(t);
</code></pre>
<p><a href="" id="njs_api_fs"></a></p>
<h4 id="file-system"><a href="#file-system" id="file-system"></a>File System</h4>
<p>文件系统模块提供文件操作。</p>
<p>模块对象由<code>require('fs')</code>返回。由于<a href="njs-changes.html#njs0.3.9">0.3.9</a>，因此可以通过<code>require('fs').promises</code>对象获得文件系统方法的授权版本：</p>
<pre><code class="hljs language-shell">&gt; var fs = require('fs').promises;
undefined
&gt; fs.readFile(&quot;/file/path&quot;).then((data)=&gt;console.log(data))
&lt;file data&gt;
</code></pre>
<h4 id="accesssyncpath-mode"><a href="#fs_accesssync" id="fs_accesssync"></a> accessSync(path[, mode])</h4>
<ul>
<li>
<p>同步测试<code>path</code>(<a href="njs-changes.html#njs0.3.9">0.3.9</a>)中指定的文件或目录的权限。如果检查失败，将返回错误，否则，该方法将返回未定义。</p>
</li>
<li>
<p><code>mode</code></p>
<ul>
<li>默认情况下为<a href="#access_const">fs.constants.F_OK</a>。 mode 参数是一个可选的整数，它指定要执行的可访问性检查。</li>
</ul>
</li>
</ul>
<pre><code class="hljs language-shell">try {
    fs.accessSync('/file/path', fs.constants.R_OK | fs.constants.W_OK);
    console.log('has access');
} catch (e) {
    console.log('no access');)
}
</code></pre>
<h4 id="appendfilesyncfilename-data-options"><a href="#appendfilesync" id="appendfilesync"></a> appendFileSync(filename, data[, options])</h4>
<ul>
<li>
<p>同步将指定的<code>data</code>附加到具有<code>filename</code>的文件中。如果文件不存在，将创建它。 <code>options</code>参数应该是具有以下键的对象：</p>
</li>
<li>
<p><code>mode</code></p>
<ul>
<li>
<p>模式选项，默认为<code>0o666</code></p>
</li>
<li>
<p><code>flag</code></p>
<ul>
<li>文件系统<a href="#njs_api_fs_flags">flag</a>，默认为<code>a</code></li>
</ul>
</li>
</ul>
</li>
</ul>
<h4 id="mkdirsyncpath-options"><a href="#fs_mkdirsync" id="fs_mkdirsync"></a> mkdirSync(path[, options])</h4>
<ul>
<li>在指定的<code>path</code>(<a href="njs-changes.html#njs0.4.2">0.4.2</a>)上同步创建目录。 <code>options</code>参数应为指定<a href="#fs_mkdirsync_mode">mode</a>的<code>integer</code>或具有以下键的对象：</li>
</ul>
<h4 id="mode"><a href="#fs_mkdirsync_mode" id="fs_mkdirsync_mode"></a> mode</h4>
<pre><code class="hljs language-shell"> - mode option, by default is  `0o777` \.
</code></pre>
<h4 id="readdirsyncpath-options"><a href="#fs_readdirsync" id="fs_readdirsync"></a> readdirSync(path[, options])</h4>
<ul>
<li>同步读取指定<code>path</code>(<a href="njs-changes.html#njs0.4.2">0.4.2</a>)处目录的内容。 <code>options</code>参数应为指定<a href="#fs_readdirsync_encoding">encoding</a>的字符串或具有以下键的对象：</li>
</ul>
<h4 id="encoding"><a href="#fs_readdirsync_encoding" id="fs_readdirsync_encoding"></a> encoding</h4>
<pre><code class="hljs language-shell"> - encoding, by default is not specified\. The encoding can be  `utf8` \.
</code></pre>
<h4 id="withfiletypes"><a href="#fs_readdirsync_withfiletypes" id="fs_readdirsync_withfiletypes"></a> withFileTypes</h4>
<pre><code class="hljs language-shell"> - if set to  `true` , the files array will contain [fs\.Dirent](njs-reference.html#fs_dirent) objects, by default is  `false` \.
</code></pre>
<h4 id="readfilesyncfilename-options"><a href="#readfilesync" id="readfilesync"></a> readFileSync(filename[, options])</h4>
<ul>
<li>
<p>同步返回提供的<code>filename</code>的文件内容。 <code>options</code>参数包含指定编码的<code>string</code>。如果未指定，则返回<a href="#string_tobytes">byte string</a>。如果指定了<code>utf8</code>编码，则返回 Unicode 字符串。否则，<code>options</code>应该是具有以下键的对象：</p>
</li>
<li>
<p><code>encoding</code></p>
<ul>
<li>
<p>编码，默认情况下未指定。编码可以是<code>utf8</code></p>
</li>
<li>
<p><code>flag</code></p>
<ul>
<li>文件系统<a href="#njs_api_fs_flags">flag</a>，默认为<code>r</code></li>
</ul>
</li>
</ul>
</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; var fs = require('fs')
undefined
&gt;&gt; var file = fs.readFileSync('/file/path.tar.gz')
undefined
&gt;&gt; var gzipped = /^\x1f\x8b/.test(file); gzipped
true
</code></pre>
<h4 id="realpathsyncpath-options"><a href="#fs_realpathsync" id="fs_realpathsync"></a> realpathSync(path[, options])</h4>
<ul>
<li>通过使用<a href="javascript:window.open('http://man7.org/linux/man-pages/man3/realpath.3.html');" target="_blank" rel="noopener noreferrer">realpath(3)</a>解析<code>.</code>，<code>..</code>和符号链接来同步计算规范路径名。 <code>options</code>参数可以是指定编码的字符串，也可以是具有 encoding 属性的对象，该对象指定要用于传递给回调(<a href="njs-changes.html#njs0.3.9">0.3.9</a>)的路径的字符编码。</li>
</ul>
<h4 id="renamesyncoldpath-newpath"><a href="#fs_renamesync" id="fs_renamesync"></a> renameSync(oldPath, newPath)</h4>
<ul>
<li>同步将文件的名称或位置从<code>oldPath</code>更改为<code>newPath</code>(<a href="njs-changes.html#njs0.3.4">0.3.4</a>)。</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; var fs = require('fs')
undefined
&gt;&gt; var file = fs.renameSync('hello.txt', 'HelloWorld.txt')
undefined
</code></pre>
<h4 id="rmdirsyncpath"><a href="#fs_rmdirsync" id="fs_rmdirsync"></a> rmdirSync(path)</h4>
<ul>
<li>同步删除指定的<code>path</code>(<a href="njs-changes.html#njs0.4.2">0.4.2</a>)上的目录。</li>
</ul>
<h4 id="symlinksynctarget-path"><a href="#fs_symlinksync" id="fs_symlinksync"></a> symlinkSync(target, path)</h4>
<ul>
<li>使用<a href="javascript:window.open('http://man7.org/linux/man-pages/man2/symlink.2.html');" target="_blank" rel="noopener noreferrer">symlink(2)</a>(<a href="njs-changes.html#njs0.3.9">0.3.9</a>)同步创建指向<code>target</code>的名为<code>path</code>的链接。相对目标相对于链接的父目录。</li>
</ul>
<h4 id="unlinksyncpath"><a href="#fs_unlinksync" id="fs_unlinksync"></a> unlinkSync(path)</h4>
<ul>
<li>通过<code>path</code>(<a href="njs-changes.html#njs0.3.9">0.3.9</a>)同步取消链接文件。</li>
</ul>
<h4 id="writefilesyncfilename-data-options"><a href="#writefilesync" id="writefilesync"></a> writeFileSync(filename, data[, options])</h4>
<ul>
<li>
<p>将<code>data</code>同步写入具有<code>filename</code>的文件。如果文件不存在，将创建它；如果文件存在，将被替换。 <code>options</code>参数应该是具有以下键的对象：</p>
</li>
<li>
<p><code>mode</code></p>
<ul>
<li>
<p>模式选项，默认为<code>0o666</code></p>
</li>
<li>
<p><code>flag</code></p>
<ul>
<li>文件系统<a href="#njs_api_fs_flags">flag</a>，默认为<code>w</code></li>
</ul>
</li>
</ul>
</li>
</ul>
<pre><code class="hljs language-shell">&gt;&gt; var fs = require('fs')
undefined
&gt;&gt; var file = fs.writeFileSync('hello.txt', 'Hello world')
undefined
</code></pre>
<p><a href="" id="fs_dirent"></a></p>
<h4 id="fsdirent"><a href="#fsdirent" id="fsdirent"></a>fs.Dirent</h4>
<p><code>fs.Dirent</code>是目录条目(文件或子目录)的表示。当使用<a href="#fs_readdirsync">withFileTypes</a>选项调用<a href="#fs_readdirsync_withfiletypes">readdirSync()</a>时，结果数组包含<code>fs.Dirent</code>个对象。</p>
<ul>
<li>
<p><code>dirent.isBlockDevice()</code> —如果<code>fs.Dirent</code>对象描述了块设备，则返回<code>true</code>。</p>
</li>
<li>
<p><code>dirent.isCharacterDevice()</code> —如果<code>fs.Dirent</code>对象描述字符设备，则返回<code>true</code>。</p>
</li>
<li>
<p><code>dirent.isDirectory()</code> —如果<code>fs.Dirent</code>对象描述文件系统目录，则返回<code>true</code>。</p>
</li>
<li>
<p><code>dirent.isFIFO()</code> —如果<code>fs.Dirent</code>对象描述了先进先出(FIFO)管道，则返回<code>true</code>。</p>
</li>
<li>
<p><code>dirent.isFile()</code> —如果<code>fs.Dirent</code>对象描述了常规文件，则返回<code>true</code>。</p>
</li>
<li>
<p><code>dirent.isSocket()</code> —如果<code>fs.Dirent</code>对象描述了套接字，则返回<code>true</code>。</p>
</li>
<li>
<p><code>dirent.isSymbolicLink()</code> —如果<code>fs.Dirent</code>对象描述了符号链接，则返回<code>true</code>。</p>
</li>
<li>
<p><code>dirent.name</code> —文件<code>fs.Dirent</code>对象的名称。</p>
</li>
</ul>
<p><a href="" id="access_const"></a></p>
<h4 id="文件访问常量"><a href="#文件访问常量" id="文件访问常量"></a>文件访问常量</h4>
<p><a href="#fs_accesssync">access()</a>方法可以接受以下标志。这些标志由<code>fs.constants</code>导出：</p>
<ul>
<li>
<p><code>F_OK</code> —表示文件对调用过程可见，如果未指定模式，则默认使用</p>
</li>
<li>
<p><code>R_OK</code>-表示调用过程可以读取文件</p>
</li>
<li>
<p><code>W_OK</code> —表示可以由调用过程写入文件</p>
</li>
<li>
<p><code>X_OK</code> —表示可以由调用过程执行文件</p>
</li>
</ul>
<p><a href="" id="njs_api_fs_flags"></a></p>
<h4 id="文件系统标志"><a href="#文件系统标志" id="文件系统标志"></a>文件系统标志</h4>
<p><code>flag</code>选项可以接受以下值：</p>
<ul>
<li>
<p><code>a</code> —打开要附加的文件。如果文件不存在，则创建该文件</p>
</li>
<li>
<p><code>ax</code>-与<code>a</code>相同，但是如果文件已存在则失败</p>
</li>
<li>
<p><code>a+</code> —打开文件进行读取和附加。如果文件不存在，将创建它</p>
</li>
<li>
<p><code>ax+</code>-与<code>a+</code>相同，但是如果文件已存在则失败</p>
</li>
<li>
<p><code>as</code> —打开一个文件以同步方式添加。如果文件不存在，将创建它</p>
</li>
<li>
<p><code>as+</code> —打开文件以同步模式读取和追加。如果文件不存在，将创建它</p>
</li>
<li>
<p><code>r</code> —打开文件进行读取。如果文件不存在，则会发生异常</p>
</li>
<li>
<p><code>r+</code> —打开文件进行读写。如果文件不存在，则会发生异常</p>
</li>
<li>
<p><code>rs+</code> —打开文件以同步模式进行读写。指示 os 绕过本地文件系统缓存</p>
</li>
<li>
<p><code>w</code> —打开要写入的文件。如果文件不存在，将创建它。如果文件存在，它将被替换</p>
</li>
<li>
<p><code>wx</code>-与<code>w</code>相同，但是如果文件已存在则失败</p>
</li>
<li>
<p><code>w+</code> —打开文件进行读写。如果文件不存在，将创建它。如果文件存在，它将被替换</p>
</li>
<li>
<p><code>wx+</code>-与<code>w+</code>相同，但是如果文件已存在则失败</p>
</li>
</ul>
</div>
</div>
</section>
<div class="right-sidebar">
<div class="affix"><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6108808167664152" data-ad-slot="3102929424" data-ad-format="auto" data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></div>
</div>
</div>
<div class="ft">
<a href="#toolbar-title" id="anchorNavigationExGoTop"><i class="fa fa-arrow-up"></i></a>
<footer class="footer">
<div class="footer__container--normal">
<img alt="扫码关注公众号" title="扫码关注公众号" src="static/picture/qr-code.png" width="170" height="170">
<div class="footer__description--normal">
<p class="paragraph footer__author--normal">Docs4dev<sup class="super">&#xAE;</sup>
</p>
<p class="paragraph footer__quote&#45;&#45;normal">
如果你在使用过程中遇到任何问题，可以在 <a href="javascript:window.open('https://github.com/docs4dev/docs4dev-issues');" target="_blank" rel="noopener noreferrer">这里<i class="fa fa-external-link"></i></a> 提issue。
</p>
<div class="footer__main--normal">
<p class="paragraph footer__main__paragraph--normal copyright" style="color: #666 !important;">
<a href="javascript:window.open('https://beian.miit.gov.cn/');">
蜀ICP备14021783号-6
</a>
</p>
<p class="paragraph footer__main__paragraph--normal copyright" style="color: #666 !important;">
Copyright &#xA9; Docs4dev all
right reserved, powered by <a href="index2.html" target="_blank">Docs4dev</a></p>
</div>
</div>
</div>
<div class="box__issues">
</div>
</footer>
</div>
</div>
</div>
</div>
</div>
<script>
  var hasToc = true;
  /*  var downloadable = /!*false*!/ false;
    var editable = /!*false*!/ false;
    var code = /!*"nginx"*!/ false;
    var version = /!*"current"*!/ false;
    var type = /!*"reference"*!/ false;
    var lang = /!*"zh"*!/ 'en';
    //edit link
    require(["gitbook", "jQuery"], function (gitbook, $) {
      gitbook.events.bind('start', function (e, config) {
        // Add edit toolbar to left
        var chapterId = /!*17697*!/ 0;
        if (downloadable) {
          gitbook.toolbar.createButton({
            icon: 'fa fa-download',
            text: '下载',
            onClick: function () {
              window.open('/download?code=' + code + '&version=' + version + '&type=' + type + '&lang=' + lang);
            }
          });
        }
        if (editable) {
          gitbook.toolbar.createButton({
            icon: 'fa fa-edit',
            text: '编辑此页',
            onClick: function () {
              window.open('/docs/edit?chapterId=' + chapterId + '&lang=' + lang);
            }
          });
        }
      });
    });*/
</script>
<script>
    var code = "nginx";
    var lang = "zh";
  </script>

<script src="static/js/autocomplete-js.js"></script>
<script src="static/js/app.min.js"></script>
<script src="static/js/search.min.js"></script>
</body>
</html>
